package com.aura.lyngen.service;

import com.aura.lyngen.model.dto.chathistory.ChatHistoryQueryRequest;
import com.aura.lyngen.model.entity.ChatHistory;
import com.aura.lyngen.model.entity.User;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;

import java.time.LocalDateTime;

/**
 * 服务层。
 *
 * @author ZJX
 * @since 2025-09-03 19:30:02
 */
public interface ChatHistoryService extends IService<ChatHistory> {

    /**
     * 添加对话记录
     *
     * @param appId       应用ID
     * @param message     消息内容
     * @param messageType 消息类型
     * @param userId      用户ID
     * @return 是否添加成功
     */
    boolean addChatMessage(Long appId, String message, String messageType, Long userId);

    /**
     * 根据应用ID删除 应用对话记录
     *
     * @param appId 应用ID
     * @return 是否删除成功
     */
    boolean deleteByAppId(Long appId);

    /**
     * 将对话记录加载到内存中
     *
     * @param appId      应用ID
     * @param chatMemory 内存
     * @param maxCount   最大数量
     * @return 加载的数量
     */
    int loadChatHistoryToMemory(Long appId, MessageWindowChatMemory chatMemory, int maxCount);


    /**
     * 根据应用ID分页查询应用对话记录
     *
     * @param appId          应用ID
     * @param pageSize       页面大小
     * @param lastCreateTime 最后创建时间
     * @param loginUser      登录用户
     * @return 对话记录列表
     */
    Page<ChatHistory> listAppChatHistoryByPage(Long appId, int pageSize, LocalDateTime lastCreateTime, User loginUser);

    /**
     * 根据查询条件获取查询包装类
     *
     * @param chatHistoryQueryRequest 查询条件
     * @return 查询包装类
     */
    QueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);
}
